package business.controleacesso;

import java.util.List;

import javax.faces.application.NavigationHandler;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.http.HttpSession;

import business.sistema.ExceptionSistema;
import business.sistema.IObjetoSistema;

public class ControleAcesso implements PhaseListener
{
	private static final long serialVersionUID = 1L;

	public void afterPhase(PhaseEvent event)
	{
		
	}

	public void beforePhase(PhaseEvent event)
	{
		try
		{
			FacesContext context = event.getFacesContext();
			HttpSession session = (HttpSession) context.getExternalContext().getSession(true);
			NavigationHandler navigationHandler = context.getApplication().getNavigationHandler();
			
			
			if(event.getPhaseId().equals(PhaseId.RENDER_RESPONSE))
			{
				if(context.getViewRoot() != null)
				{
					String paginaDestino = context.getViewRoot().getViewId();
					UserNet usuario = (UserNet)session.getAttribute("usuarioLogado");
					
//					 || !temPermissao(paginaDestino, usuario)
					
					if(usuario == null)
					{
						navigationHandler.handleNavigation(context, null, "telaLogin");
					}
					else
					{
//						navigationHandler.handleNavigation(context, null, "telaCotacoes");
					}
				}
			}
			
//			if(event.getPhaseId().equals(PhaseId.RESTORE_VIEW))
//			{
//				if(context.getViewRoot() != null)
//				{
//					String paginaDestino = context.getViewRoot().getViewId();
//					
//					if(!paginaDestino.equals("/login.xhtml") && !paginaDestino.equals("/index.xhtml"))
//					{
//						if(session.getAttribute("usuarioLogado") == null)
//						{
//							context.getExternalContext().redirect("login.xhtml");
//						}
//					}
//				}
//			}
//			else
//			{
//				if(context.getViewRoot() != null)
//				{
//					String paginaDestino = context.getViewRoot().getViewId();
//					
//					if(!paginaDestino.equals("/login.xhtml") && !paginaDestino.equals("/index.xhtml"))
//					{
//						if(session.getAttribute("usuarioLogado") == null)
//						{
//							context.getExternalContext().redirect("login.xhtml");
//						}
//						else
//						{
//							context.getExternalContext().redirect("index.xhtml");
//						}
//					}
//				}
//			}
		}
		catch (Exception ex) 
		{
			new ExceptionSistema(ex);
		}
	}
	
	private boolean temPermissao(String pagina, UserNet usuario)
	{
		boolean temPermissao = false;
		
		List<IObjetoSistema> paginas = new Pagina().obterTodosPorFiltro(" 1 = 1 AND this_.nome LIKE '%" + pagina + "%'");
		
		for(IObjetoSistema objeto : paginas)
		{
			Pagina paginaCadastrada = (Pagina)objeto;
			
			if(paginaCadastrada.getNome().equals(pagina))
			{
				temPermissao = paginaCadastrada.aceitaUsuario(usuario);
			}
		}
		
		return temPermissao;
	}

	public PhaseId getPhaseId()
	{
//		return null;
		return PhaseId.ANY_PHASE;
	}

}
